package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * JDBC Java DataBase Connectivity      java数据库连接
 *
 * JDBC是java官当提供的一套接口
 * 规范了java程序连接不同DBMS的操作，不同的数据库提供商都提供了一套JDBC的实现类，这套实现类称为连接该数据库
 * 的"驱动"
 *
 * JDBC中核心的接口
 * DriverManager:驱动管理器，用于加载驱动并于数据库建立连接
 *
 * Connection:它的每一个实例用于表示一个数据库的连接
 * Statement:SQL语句的执行对象，用来执行SQL语句
 * PreparedStatement:用于执行预编译SQL语句的执行对象
 * ResultSet:查询结果集
 *
 */
public class JDBCDemo1 {
    public static void main(String[] args) {
        /*
            连接数据库的基本流程
            1:注册驱动，Class.forName(),加载JDBC的Driver实现(Driver不同数据库厂商会实现)
              Class.forName()中Driver类的完全限定名，不同数据库不同
            2:通过DriverManager来使用驱动与数据库建立连接，并获取Connection实例
            3:通过Connection获取一个执行SQL语句的执行对象Statement
            4:通过Statement执行SQL语句
            5:如果执行的是DQL语句则会产生查询结果集ResultSet
            6:遍历ResultSet得到查询结果
            7:关闭连接
         */
        try {
            /*
                1:Driver实现类不同数据库提供的完全限定名是不同的，但是同一个数据库是固定的。
             */
            Class.forName("com.mysql.cj.jdbc.Driver");
            /*
                2 建立连接,连接数据库时的路径不同的数据库不完全一样
                DriverManager.getConnection()需要传入三个参数
                参数1:数据库路径
                参数2:数据库用户名
                参数3:数据库密码

             */
            Connection connection = DriverManager.getConnection(
                    //   jdbc:mysql://数据库IP:端口/数据库名?参数...
                    "jdbc:mysql://localhost:3306/tedu?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true",
                    "root",
                    "root"
            );
            System.out.println("成功连接数据库");

            //3创建执行SQL语句的执行对象
            Statement statement = connection.createStatement();
            /*
                创建一张表:userinfo
                CREATE TABLE userinfo(
                    id INT PRIMARY KEY AUTO_INCREMENT,
                    username VARCHAR(32),
                    password VARCHAR(32),
                    nickname VARCHAR(32),
                    age INT(3)
                )
             */
            String sql = "CREATE TABLE userinfo( " +
                    "                    id INT PRIMARY KEY AUTO_INCREMENT, " +
                    "                    username VARCHAR(32), " +
                    "                    password VARCHAR(32), " +
                    "                    nickname VARCHAR(32), " +
                    "                    age INT(3) " +
                    "                )";
            /*
                boolean execute(String sql)
                用于执行SQL语句，返回值表示执行后是否产生了结果集。
                但是因为执行DML和DQL语句有专门的方法，因此该execute一般用于执行DDL语句
             */
            statement.execute(sql);
            System.out.println("表创建成功");

            connection.close();//与数据库断开连接

        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }


    }
}
